1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | IF NOT xInit THEN UM ( sName := 'Normal Operation', dwAllowsLeavingFromStates := PACK_ML.State.Stopped OR PACK_ML.State.Aborted OR PACK_ML.State.Idle, IF SysStrCmp(Client.sCommandToPLC, Client.LockCommands[0]) = 0 THEN //First Lock Function ; ELSIF SysStrCmp(Client.sCommandToPLC, 'UnSuspend') = 0 THEN UnSuspend(); END_CASE Client.iCommandToPLC := 0; Client.sCommandToPLC := ''; Client.bReadyToPLC := FALSE; CASE UM.CurrentState OF PACK_ML.State.Stopped: ; PACK_ML.State.Aborted: PACK_ML.State.Idle: PACK_ML.State.Complete : PACK_ML.State.Execute : // NOTE: Remember that most math has the Y axis as positive above the X. //final double result = Math.toDegrees(Math.atan2(deltaY, deltaX)); //return (result < 0) ? (360d + result) : result; actualPositionLinear1 := AI_DistanceRight - 244; actualPositionLinear2 := AI_DistanceLeft - 244; deltaY := 250 - 0; deltaX := actualPositionLinear1 - actualPositionLinear2; angle := OSCAT_BASIC.ATAN2(deltaY,deltaX); targetPositionBoat := angle * 180 / 3.1415; IF targetPositionBoat <= 0 THEN targetPositionBoat := 0; ELSIF targetPositionBoat >= 360 THEN targetPositionBoat := 360; END_IF BoatAngle := targetPositionBoat; IF Client.ActualStep >= 300 THEN AO_AnalogRefrence := AI_DistanceLeft; ELSE AO_AnalogRefrence := 0; IF CMMT_ST.AxisError THEN Abort(); IF BoatAngle >= 85 AND BoatAngle <= 95 THEN Steady := TRUE; Steady := FALSE; SendCommand(Command := CommandType.Media ,Value := 'Boat Roll'); IF puzzleTimer.iProcess = 25 THEN Level.Beginner: Level.Placeholder1: Level.Intermediate: Level.Placeholder2: Level.Advanced: END_CASE Mode.Mode2: // Location Client.ActualStep := 200; Client.ActualStep := 300; END_CASE // IF CMMT_ST.AxisError THEN // ELSE // END_IF // CMMT_ST.Reset(); //20: // Client.ActualStep := 21; // END_IF // enable := CMMT_ST.EnableDrive(); // Client.ActualStep := 20; //30: // Client.ActualStep := 31; //31: // IF home THEN //32: // Client.ActualStep := 40; // Client.ActualStep := tempStep; bMove := CMMT_ST.MoveAbsolute(Position:= 150 , Acceleration:= 500, Jerk:= 1000, ErrorID=> , IF bMove THEN END_IF IF CMMT_ST.TargetReached THEN 102: 103: END_IF CASE OSCAT_BASIC.RDM2(last :=0, low := 1,high := 4) OF Client.ActualStep := 210; Client.ActualStep := 220; |